package hust.cs.javacourse.search.index.impl;

import hust.cs.javacourse.search.index.AbstractTerm;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Term extends AbstractTerm {
    /**
     * 子类缺省构造方法
     */
    public Term() {
        super();
    }

    /**
     * 子类构造方法
     * @param content：Term内容
     */
    public Term(String content) {
        super(content);
    }

    /**
     * 判断两个Term内容是否相同
     * @param obj ：要比较的另外一个Term
     * @return 内容相等返回true，不等返回false
     */
    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Term) {
            Term t = (Term)obj;
            return this.content.equals(t.content);
        }
        return false;
    }

    /**
     * 返回Term的内容
     * @return 返回字符串
     */
    @Override
    public String toString() {
        String info = this.content;
        return info;
    }

    /**
     * 返回Term内容
     * @return Term内容
     */
    @Override
    public String getContent() {
        return this.content;
    }

    /**\
     * 设置Term内容
     * @param content：Term的内容
     */
    @Override
    public void setContent(String content) {
        this.content = content;
    }

    /**
     * 比较两个Term的大小（按字典序）
     * @param o： 要比较的Term对象
     * @return ：两个Term对象的字典序差值
     */
    @Override
    public int compareTo(AbstractTerm o) {
        return this.content.compareToIgnoreCase(o.getContent());
    }

    /**
     * 序列化对象到输出流
     * @param out :输出流对象
     */
    @Override
    public void writeObject(ObjectOutputStream out) {
        try {
            out.writeObject(this.content);
            //out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 从输入流反序列化到对象
     * @param in ：输入流对象
     */
    @Override
    public void readObject(ObjectInputStream in) {
        try {
            this.content = (String) (in.readObject());
            //in.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch(ClassNotFoundException c)
        {
            System.out.println("Employee class not found");
            c.printStackTrace();
        }
    }
}
